//SubClassTest.java
package com.ylaihui.oop13;

class subClass extends SuperClass implements InterfaceA,InterfaceB{
	public void defaultMethod1(){
		System.out.println("subClass defaultMethod1...");
	}

	// 如果实现类实现了多个接口，而这多个接口中定义了同名同参数的默认方法，那么在实现类没有重写此方法的情况下，报错。-->接口冲突。
	// 这就需要我们必须在实现类中重写此方法
	public void defaultMethod3() {
		System.out.println("subClass defaultMethod3...");
	}
	public void Method(){
		// 在子类(或实现类)的方法中调用父类、接口中被重写的方法
		InterfaceA.super.defaultMethod3();
	}
}

public class SubClassTest {
	public static void main(String[] args) {
		subClass sc = new subClass();
		// 接口中定义的静态方法，只能通过接口来调用，不能通过实现类或其对象来调用
//		sc.staticMethod(); // The method staticMethod() is undefined for the type subClass
		InterfaceA.staticMethod();
		
		// 通过实现类的对象，可以调用接口中的默认方法
		sc.defaultMethod();
		
		// 如果实现类重写了接口中的默认方法，调用时，仍然调用的是重写以后的方法
		sc.defaultMethod1(); // subClass defaultMethod1...

		// 如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的默认方法，那么子类在没有重写此方法的情况下，
		// 默认调用的是父类中的同名同参数的方法，而非调用的接口中的默认方法
		sc.defaultMethod2(); // SuperClass defaultMethod...

	}
}
